From: Florian Müllner Date: Wed, 5 Jul 2023 19:01:17 +0000 (+0200) Subject: st/icon-theme: Pick best-matching name from all themes X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~337^2~1^2~160 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=b3b4eeb496ebdcffc6341c00d21871f10c8301b7;p=gnome-shell.git st/icon-theme: Pick best-matching name from all themes When resolving an icon name, we currently look in all themes in order whether one of the requested names matches. That means, a "keyboard" icon from the configured theme will trump over any of "keyboard-shift", "keyboard-brightness" and "keyboard-preferences" from lower-ranked themes (like "Adwaita" and "hicolor"). That applies to custom icons we include in the resource, which are added to the fallback ("hicolor") theme. We are less bound by the named-icons spec than GTK, so we can adapt the lookup to prefer the most accurate match to matches from the highest priority theme. Part-of: --- diff --git a/src/st/st-icon-theme.c b/src/st/st-icon-theme.c index 9128c57ef..4b04264eb 100644 --- a/src/st/st-icon-theme.c +++ b/src/st/st-icon-theme.c @@ -1301,25 +1301,28 @@ real_choose_icon (StIconTheme *icon_theme, * In other words: We prefer symbolic icons in inherited themes over * generic icons in the theme. */ - for (l = icon_theme->themes; l; l = l->next) + for (i = 0; icon_names[i] && icon_name_is_symbolic (icon_names[i]); i++) { - theme = l->data; - for (i = 0; icon_names[i] && icon_name_is_symbolic (icon_names[i]); i++) + icon_name = icon_names[i]; + + for (l = icon_theme->themes; l; l = l->next) { - icon_name = icon_names[i]; + theme = l->data; + icon_info = theme_lookup_icon (theme, icon_name, size, scale, allow_svg); if (icon_info) goto out; } } - for (l = icon_theme->themes; l; l = l->next) + for (i = 0; icon_names[i]; i++) { - theme = l->data; + icon_name = icon_names[i]; - for (i = 0; icon_names[i]; i++) + for (l = icon_theme->themes; l; l = l->next) { - icon_name = icon_names[i]; + theme = l->data; + icon_info = theme_lookup_icon (theme, icon_name, size, scale, allow_svg); if (icon_info) goto out;